﻿#include "header.h"

/*

给定一个二叉树，它的每个结点都存放一个 0-9 的数字，每条从根到叶子节点的路径都代表一个数字。
例如，从根到叶子节点路径 1->2->3 代表数字 123。
计算从根到叶子节点生成的所有数字之和。

示例 1:

输入: [1,2,3]
    1
  /   \
 2     3

输出: 25

从根到叶子节点路径 1->2 代表数字 12.
从根到叶子节点路径 1->3 代表数字 13.
因此，数字总和 = 12 + 13 = 25.

*/

class Solution {
public:
	int sumNumbers(TreeNode *root)
	{
		if (!root) return 0;
		int count = 0;
		int num = 0;
		pretrav(root, num, count);
		return count;
	}
	void pretrav(TreeNode *node, int num, int &count)
	{
		if (!node) return;
		num = num * 10 + node->val;
		if (!node->left&&!node->right)
			count += num;
		pretrav(node->left, num, count);
		pretrav(node->right, num, count);
	}
};